home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 8 / Revista CD Expert nº 08 CD1.iso / Utilitarios / Programacao / MS-DOS Interrupt List / inter60f / INT2RTF.ZIP / UPCASER.PAS < prev    next >
Pascal/Delphi Source File  |  1996-07-31  |  1KB  |  83 lines

  1. { Upcaser unit.                                                   }
  2. { The software included, data formats and basic algorithms are    }
  3. { copyright (C) 1995, 96 by Slava Gostrenko. All rights reserved. }
  4.  
  5. unit
  6.   Upcaser;
  7.  
  8. interface
  9.  
  10. var
  11.   Upcase : array [Char] of Char;
  12.  
  13. procedure StUpcase(var S: string);
  14. function  StUpcase2(const S: string): string;
  15.  
  16. implementation
  17.  
  18. uses
  19.   InitUpC;
  20.  
  21. procedure StUpcase(var S: string); assembler;
  22. asm
  23.   les  di, s
  24.   cld
  25.  
  26.   xor  cx, cx
  27.   mov  cl, es: [di]
  28.  
  29.   jcxz @ret
  30.  
  31.   inc  di
  32.  
  33.   mov  bx, offset Upcase
  34. @loop:
  35.   mov  al, es: [di]
  36.   xlat
  37.   stosb
  38.   loop @loop
  39.  
  40. @ret:
  41. end;
  42.  
  43. function  StUpcase2(const S: string): string; assembler;
  44. asm
  45.   mov  dx, ds
  46.  
  47.   lds  si, s
  48.   les  di, @result
  49.   mov  bx, di {save start pos}
  50.   cld
  51.  
  52.   lodsb
  53.   xor  cx, cx
  54.   mov  cl, al
  55.   stosb
  56.  
  57.   jcxz @ret
  58.  
  59.   shr  cx, 1
  60.   jnc  @@1
  61.   movsb
  62. @@1:
  63.   rep  movsw
  64.  
  65.   mov  ds, dx {now xlat table is available}
  66.   mov  cl, es: [bx]
  67.   lea  di, [bx + 1]
  68.  
  69.   mov  bx, offset Upcase
  70. @loop:
  71.   mov  al, es: [di]
  72.   xlat
  73.   stosb
  74.   loop @loop
  75.  
  76. @ret:
  77.   mov  ds, dx
  78. end;
  79.  
  80. begin
  81.   InitUpcaseArr (Upcase);
  82. end.
  83.